package gang.com.twoshopping.html;

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.JavascriptInterface;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

import java.io.Serializable;

import dmax.dialog.SpotsDialog;
import gang.com.twoshopping.R;
import gang.com.twoshopping.bean.Wares;
import gang.com.twoshopping.utils.Contants;

public class WareDetalActivity extends AppCompatActivity {
    private WebView mWebView_ware_detal;
    private Wares ware;
    private WebAppInterface webappinterface;
    private SpotsDialog mDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ware_detal);
        mWebView_ware_detal = (WebView) findViewById(R.id.mWebView_ware_detal);
        Serializable serializable = getIntent().getSerializableExtra(Contants.WARE);
        if (serializable == null) {
            this.finish();
        }
        ware = (Wares) serializable;
        mDialog = new SpotsDialog(this, "loading...");
        mDialog.show();
        initWebview();
    }

    private void initWebview() {
        WebSettings settings = mWebView_ware_detal.getSettings();
        settings.setJavaScriptEnabled(true);
        //这个参数要改为false，不然加载图文的时候会发生阻塞的
        settings.setBlockNetworkImage(false);
        //允许有缓存，可以查询api文档了解里面的参数
        settings.setAppCacheEnabled(true);
        mWebView_ware_detal.loadUrl("http://112.124.22.238:8081/course_api/wares/detail.html");
        webappinterface = new WebAppInterface(this);
        //appInterface这里一定要和前端人员保持一致，这个是一个规范，协商一份文档和接口
        mWebView_ware_detal.addJavascriptInterface(webappinterface, "appInterface");
        //设置监听
        mWebView_ware_detal.setWebViewClient(new WC());
        //mWebView_ware_detal.setWebChromeClient();大家了解一下这个东西是干什么用的
    }

    /**
     * 一个Android和html通讯的接口
     */
    class WebAppInterface {
        private Context context;

        public WebAppInterface(Context context) {
            this.context = context;
        }

        //javascript调用Android本地的方法还有很多很多需要我们去理解,
        //比如调用我们手机的相机，调用本地相册，打电话，位置信息，存储数据等等

        /**
         *    javascript调用本地的
         */
        @JavascriptInterface
        public void buy(long id) {
            Toast.makeText(context, "选择购买商品", Toast.LENGTH_LONG).show();
        }

        /**
         *    javascript调用本地的
         */
        @JavascriptInterface
        public void addFavorites(long id) {
            Toast.makeText(context, "添加喜爱", Toast.LENGTH_LONG).show();
        }

        /**
         * Android调用javascript代码要在主线程里面
         */
        @JavascriptInterface
        private void showDetail() {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    mWebView_ware_detal.loadUrl("javascript:showDetail(" + ware.getId() + ")");
                }
            });
        }
    }

    /**
     * 监听器监听页面加载完，使用Android调用javascript中的方法
     * ,要注意的是一定要先刷新完页面在调用javascript的方法传递数据
     */
    class WC extends WebViewClient {
        //WebViewClient
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            return super.shouldOverrideUrlLoading(view, request);
            //可以根据协议进行判断执行某些事件,
            //if (request.equals("ivan://"))
        }

        //页面加载完触发的方法，进行界面的时候有一个load效果
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            if (mDialog != null && mDialog.isShowing()) {
                mDialog.cancel();
                webappinterface.showDetail();
            }

        }
    }
}
